package com.qt.stream;

import com.qt.stream.entity.Actor;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Author zsf
 * @Date 2023/9/13 22:02
 * @Version 1.0
 */
public class StreamExercise {


    public static void main(String[] args) {
        //extracted();
        //extracted1();

        /**
         * 现在有两个ArrayList集合，
         * 第一个集合中:存储6名男演员的名字和年龄。
         * 第二个集合中:存储6名女演员的名字和年龄。姓名和年龄中间用逗号隔开。比如:张三,23
         * 要求完成如下的操作:
         * 1，男演员只要名字为3个字的前两人
         * 2，女演员只要姓杨的，并且不要第一个
         * 3，把过滤后的男演员姓名和女演员姓名合并到一起
         * 4，将上一步的演员信息封装成Actor对象。
         * 5，将所有的演员对象都保存到List集合中。
         * 备注:演员类Actor，属性只有一个:name,age
          */
        ArrayList<String> manList = new ArrayList<>();
        ArrayList<String> womanList = new ArrayList<>();
        Collections.addAll(manList, "张三丰,23", "张无忌,24", "张三,25", "郭靖,47", "杨过,27", "黄药师,82");
        Collections.addAll(womanList, "杨龙女,25","郭襄,22","杨景田,23","王语嫣,24","美羊羊,26","郭晶晶,27");
        Stream<String> manStream = manList.stream()
                .filter(s -> s.split(",")[0].length() == 3)
                .limit(2);
        Stream<String> womanStream = womanList.stream()
                .filter(s -> s.split(",")[0].startsWith("杨"))
                .skip(1);
        ArrayList<Actor> actors = new ArrayList<>();
        Stream.concat(manStream, womanStream)
                .map(s -> {
                    String[] split = s.split(",");
                    return new Actor(split[0],Integer.valueOf(split[1]));
                })
                .forEach(s -> System.out.println(s));



    }

    private static void extracted1() {
        /**
         * 练习:
         * 创建一个ArrayList集合，并添加以下字符串，字符串中前面是姓名，后面是年龄"zhangsan,3”
         * "tisi, 4" "wangw, 25”
         * 公
         * 保留年龄大于等于24岁的人，并将结果收集到Map集合中，姓名为键，年龄为值
         */
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "zhangsan,3", "lisi,4", "wangwu,25");

        Map<String, Integer> collect = list.stream()
                .filter(s -> Integer.valueOf(s.split(",")[1]) >= 24)
                .collect(Collectors.toMap(
                        s -> s.split(",")[0],
                        s -> Integer.valueOf(s.split(",")[1])));

        System.out.println(collect);
    }


    /**
     * 数据过滤
     * 定义一个集合，并添加一些整数1，2，3，4，5，6，7，8，9，10过滤奇数，只留下偶数。
     * 并将结果保存起来
     */
    private static void extracted() {
        ArrayList<Integer> intList = new ArrayList<>();

        Collections.addAll(intList, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        List<Integer> result = intList.stream()
                .filter(i -> i % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(result);
    }



}
